import axios from "axios";
import { showMessage } from "./status"; // 引入状态码
import { ElMessage } from "element-plus"; // 引入提示框
import { useRouter } from 'vue-router';
const router = useRouter(); // 获取路由实例
// 设置接口超时时间
axios.defaults.timeout = 60000;
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';

// console.log('当前环境', import.meta.env.VITE_APP_ENV);
// console.log('地址', import.meta.env.VITE_APP_BASE_URL);
if (import.meta.env.VITE_APP_ENV === "production") {// 生产环境
    axios.defaults.baseURL = import.meta.env.VITE_APP_BASE_URL;
} else if (import.meta.env.VITE_APP_ENV === "development") {// 开发环境
    axios.defaults.baseURL = '/api'
}
// axios.defaults.baseURL = import.meta.env.VITE_APP_ENV === "development" ? import.meta.env.VITE_APP_BASE_URL : config.baseUrl;  // 服务器接口地址前缀

const token = () => {
    const storedToken = localStorage.getItem("token");
    // console.log("token:", localStorage.getItem("token"));
    if (storedToken) {
        return storedToken;
    } else {
        // console.warn("Token 不存在！");
        return ""; // 或者返回 null，具体视后端需求而定
    }
};

const getCookie = (name: string) => {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
};

//请求拦截
axios.interceptors.request.use(
    (config) => {
        // 配置请求头
        config.headers["Content-Type"] = "application/json;charset=UTF-8";
        const authToken = token();
        if (authToken) {
            config.headers["Authorization"] = authToken;
        } else {
            // console.warn("请求头中未包含 Token");
        }
        //配置令牌等
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

// 响应拦截
axios.interceptors.response.use(
    (response: any) => {
        // console.log('响应成功:', response.request.responseURL);
        // console.log('响应成功:', response.data.code);
        // 判断token是否过期
        if (response) {
            if (response.data.code === 997 && response.request.responseURL.slice(-5) !== 'login') {
                // 未授权，通常是 Token 过期或无效
                ElMessage.error("登录状态已过期，请重新登录！");
                localStorage.removeItem("token");
                localStorage.removeItem("userName");
                localStorage.removeItem("role_id");
                router.push('/login');
            }
        }

        return response; // 确保返回整个响应对象，或根据需求返回 response.data
    },
    (error: any) => {
        if (error.response) {
            // 状态码不是 2xx
            // console.error('响应错误:', error.response);
            showMessage(error.response.status);
            return Promise.reject(error.response.data || error.response);
        } else if (error.request) {
            // 请求已发送，但没有收到响应
            // console.error('请求未收到响应:', error.request);
            ElMessage.warning("网络连接异常，请检查您的网络设置或稍后再试！");
            return Promise.reject(error.request);
        } else {
            // 其他错误
            // console.error('未知错误:', error.message);
            ElMessage.error("请求过程中发生未知错误，请稍后再试！");
            return Promise.reject(error.message || 'Unknown Error');
        }
    }
);

// 请求并导出
// export function request(config: { method: string, url: string, data?: any, params?: any }) {
//     return new Promise((resolve, reject) => {
//         // 增加日志输出，便于调试
//         console.log('发送请求:', config);

//         const promise = axios(config);
//         promise
//             .then((response: any) => {
//                 // 增加日志输出，查看响应数据
//                 console.log('收到响应:', response);
//                 resolve(response.data); // 确保响应数据存在再解析
//             })
//             .catch((err: any) => {
//                 // 错误处理，直接拒绝并返回错误信息
//                 reject(err);
//             });
//     });
// }
export function request(config: { method: string, url: string, data?: any, params?: any }) {
    // console.log('发送请求:', config);
    return axios(config)
        .then((response: any) => {
            // console.log('收到响应:', response);
            return response.data; // 或根据需求返回整个响应对象
        })
        .catch((err: any) => {
            console.error('请求失败:', err);
            return Promise.reject(err);
        });
}